package com.geektime.hello;

import java.util.Optional;

/**
 * @Author: DRevelation
 * @Date: 2021/1/21 14:51
 * 用Optional类也没有简化很多的代码，只是把NPE异常通过各种方法隐藏起来(包装了一层)。
 * 通过Lambda表达式可以让我们处理起来更加"优雅"一些。
 */
public class OptionalDemo {

    public static void main(String[] args) {
        User user = new User();
        user.setName("e-ha");
        user.setAge(11);
        user.setSex(1);
        User user1 = null;
        System.out.println(test1(user));
        System.out.println(test1(user1));
        System.out.println(test3(user));
        System.out.println(test3(user1));
    }

    private static String test1(User user) {
        if (user != null) {
            String name = user.getName();
            if (name != null) {
                return name.toUpperCase();
            } else {
                return null;
            }
        } else {
            return null;
        }
    }

    private static String test2(User user) {
        if (user != null && user.getName() != null) {
            return user.getName();
        } else {
            return null;
        }
    }

    private static String test3(User user) {
        return Optional.ofNullable(user)
                .map(User::getName)
                .map(String::toUpperCase).orElse(null);
    }

    private static void test() {
        User user = new User();
        user.setName("optional");
        user.setAge(11);
        user.setSex(1);

        Optional<User> optional = Optional.of(user);
        optional.ifPresent((value) -> System.out.println(value.getName()));
        //旧写法
        if (user != null) {
            System.out.println(user.getName());
        }

        User user1 = null;
        Optional<User> optional1 = Optional.ofNullable(user1);
        optional1.ifPresent((value) -> System.out.println(value.getName()));
    }

}